Device driver Programming

Device File(Device node /dev/* )
네트워크 어댑터, LCD 디스플레이, 오디오, 터미널, 키보드, 하드디스크, 플로피디스크, 프린터 등의 주변 장치
디바이스의 구동에 필요한 프로그램, 즉 디바이스 드라이버가 필수적으로 요구됨
Device Driver( *ko )
실제 장치 부분을 추상화 시켜 사용자 프로그램이 정형화된 인터페이스를 통해 디바이스를 접근할 수 있도록 해주는 프로그램
디바이스 관리에 필요한 정형화된 인터페이스 구현에 요구되는 함수와 자료구조의 집합체
표준적으로 동일 서비스 제공을 목적으로 커널의 일부분으로 내장
응용 프로그램이 하드웨어를 제어할 수 있도록 인터페이스 제공
하드웨어 독립적인 프로그램을 작성할 수 있도록 한다.
리눅스 디바이스 드라이버
사용자 관점에서의 디바이스 드라이버
사용자는 디바이스 자체에 대한 정보를 알 필요가 없다.
device는 하나의 파일로 인식된다.
파일에 대한 접근을 통하여 real device에 접근 가능
리눅스에서의 디바이스
리눅스에서는 디바이스는 특별한 파일로 취급되고, 엑세스가 가능하다.
사용자(응용 프로그램)은 file operation을 적용할 수 있다.
각 디바이스는 Major Number와 Minor Number를 가진다.
    Major number 디바이스 장치 구분
    Minor number 같은 종류의 디바이스들을 구분
디바이스 드라이버 종류
Device Driver 종류설명등록 함수명
문자 드라이버 (char)device를 파일처럼 접근하여 직접 read/write 수행
data 형태는 stream 방식으로 전송
(ex) console, keybord, serial port driver 등
register_chrdev()
블록 드라이버 (block)disk와 같은 file system을 기반으로 block 단위로 데이터를 read/write
(ex) hard disk, CD-ROM driver, floppy disk
register_blkdev()
네트워크 드라이버 (network)network의 물리계층과 frame 단위의 데이터 송수신
(ex) Ethernet device driver
register_netdev()
문자 디바이스(Char Device)
자료의 순차성을 지닌 장치
버퍼 캐쉬를 사용하지 않음
장치의 raw data를 사용자에게 제공
Terminal, Serial/Parallel, Keyboard, Sound Card, Scanner, Printer 등

블록 디바이스(Block Device)
random access 가능
블록 단위의 입출력이 가능한 장치
버퍼 캐쉬에 의한 내부 장치 표현
파일 시스템에 의해 mount 되어 관리되는 장치
디스크, RAM dis, CD-ROM 등
네트워크 디바이스(Network Device)
대응하는 장치파일이 없다.
네트워크 통신을 통해 패킷을 송수신하는 장치
응용프로그램과 통신 표준 파일 시스템 관련 호출 대신에 socket()이나 bind()등의 시스템 호출
Ethernet, PPP, ATM, ISDN 등
디바이스 드라이버의 Major & Minor Number
Major Number
커널에서 디바이스 드라이버를 구분/연결하는데 사용
같은 디바이스 종류를 지칭 1Byte(0-255 사이의 값)
Minor Number
디바이스 드라이버 내에 장치를 구분하기 위해 사용
각 디바이스의 부가적인 정보를 나타냄 2Byte
하나의 디바이스 드라이버가 여러 개의 디바이스 제어 가능
Device Driver Structure